package org.jsola.contract.service;

import org.jsola.contract.dao.ITemplateDAO;
import org.jsola.contract.dto.TemplateAddDTO;
import org.jsola.contract.dto.TemplatePreviewDTO;
import org.jsola.contract.dto.TemplateUpdateDTO;
import org.jsola.contract.entity.TemplateDO;
import org.jsola.contract.query.TemplateQuery;
import org.jsola.contract.vo.TemplateListVO;
import org.jsola.contract.vo.TemplateVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.util.List;


/**
 * 合同模板
 *
 * @author JanusMix
 */
public interface ITemplateService extends IService<ITemplateDAO, TemplateDO> {

    /**
     * 新增合同模板
     *
     * @param templateAddDTO 新增合同模板DTO
     * @param tokenUser      当前用户
     * @return 合同模板详情信息
     */
    TemplateVO save(TemplateAddDTO templateAddDTO, TokenUser tokenUser);

    /**
     * 修改合同模板
     *
     * @param templateUpdateDTO 修改合同模板DTO
     * @param tokenUser         当前用户
     * @return 更新数量
     */
    int update(TemplateUpdateDTO templateUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除合同模板，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser   当前用户
     * @param templateIds 合同模板id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... templateIds);

    /**
     * 根据合同模板id查找
     *
     * @param templateId 合同模板id
     * @param siteId     所属站点id
     * @return 合同模板详情信息
     */
    TemplateVO selectById(Long templateId, String siteId);

    /**
     * 查询合同模板
     *
     * @param templateQuery 查询条件
     * @param siteId        所属站点id
     * @return 合同模板列表信息
     */
    List<TemplateListVO> select(TemplateQuery templateQuery, String siteId);

    /**
     * 查询合同模板记录数
     *
     * @param templateQuery 查询条件
     * @param siteId        所属站点id
     * @return 合同模板记录数
     */
    int selectCount(TemplateQuery templateQuery, String siteId);

    /**
     * 分页查询合同模板
     *
     * @param templateQuery 查询条件
     * @param siteId        所属站点id
     * @return 合同模板列表信息
     */
    Page<TemplateListVO> selectPage(TemplateQuery templateQuery, String siteId);


    /**
     * 根据合同模板id查找
     *
     * @param templateId 合同模板id
     * @param siteId     所属站点id
     * @return 合同模板
     */
    TemplateDO selectDOById(Long templateId, String siteId);

    /**
     * 查询合同模板
     *
     * @param templateQuery 查询条件
     * @param siteId        所属站点id
     * @return 合同模板列表
     */
    List<TemplateDO> selectDO(TemplateQuery templateQuery, String siteId);

    /**
     * 查询分类下模板
     *
     * @param categoryId 分类id
     * @param siteId     站点id
     * @return 模板列表
     */
    List<TemplateDO> selectByCategoryId(Long categoryId, String siteId);

    /**
     * 查询分类下模板
     *
     * @param categoryIds 分类id
     * @param siteId      站点id
     * @return 模板列表
     */
    List<TemplateDO> selectByCategoryIds(List<Long> categoryIds, String siteId);

    /**
     * 根据合同相关信息 预览发起的合同图片(会上传到oss上，返回文件地址)
     * @param templatePreviewDTO 合同相关信息
     * @param tokenUser 当前用户
     * @return 文件地址
     */
    String viewJpgPath(TemplatePreviewDTO templatePreviewDTO, TokenUser tokenUser);

}


